﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using QuanLyKho.Server.BLL;
using QuanLyKho.Server;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Docking;

namespace QuanLyKho
{
    /// <summary>
    /// Interaction logic for ucDmNhaPhanPhoi.xaml
    /// </summary>
    public partial class ucDmNhaPhanPhoi : UserControl
    {
        // khai bao bien
        private Dm_NhaPhanPhoiBLL dmNhaPhanPhoiServer;
        private List<Dm_NhaPhanPhoi> listDmNhaPhanPhoiClient;
        private Dm_NhaPhanPhoi objectDmNhaPhanPhoiClient;
        private Dm_NhaPhanPhoi objectDmNhaPhanPhoiClientBacKup;
        private bool laThemMoi = true;


        public ucDmNhaPhanPhoi()
        {
            InitializeComponent();
            FormLoaded();
            GetListDmNhaPhanPhoi();
        }

        private void FormLoaded()
        {
            dmNhaPhanPhoiServer = new Dm_NhaPhanPhoiBLL();
            listDmNhaPhanPhoiClient = new List<Dm_NhaPhanPhoi>();
            GetThemMoi();
        }

        private void GetThemMoi()
        {
            txtMaDVT.IsEnabled = true;
            txtMaDVT.Text = "";
            txtTenDVT.Text = "";
            chkKichHoat.IsChecked = true;
            txtGhiChu.Text = "";
            txtDiaChi.Text = "";
            laThemMoi = true;
            objectDmNhaPhanPhoiClient = new Dm_NhaPhanPhoi();
            objectDmNhaPhanPhoiClientBacKup = new Dm_NhaPhanPhoi();
            txtMaDVT.Focus();
        }

        private void GetListDmNhaPhanPhoi()
        {
            try
            {
                listDmNhaPhanPhoiClient = new List<Dm_NhaPhanPhoi>();
                listDmNhaPhanPhoiClient = dmNhaPhanPhoiServer.ListDmNhaPhanPhoi();
                gridDsDmNhaPhanPhoi.ItemsSource = listDmNhaPhanPhoiClient;
            }
            catch (Exception)
            {
                DXMessageBox.Show("Không lấy được dữ liệu. Kết nối máy chủ bị gián đoạn.","Lỗi",MessageBoxButton.OK,MessageBoxImage.Error);
            }
        }

        private void GetFindListDmNhaPhanPhoi(string maDVT, string tenDVT)
        {
            try
            {
                listDmNhaPhanPhoiClient = new List<Dm_NhaPhanPhoi>();
                listDmNhaPhanPhoiClient = dmNhaPhanPhoiServer.FindListDmNhaPhanPhoi(maDVT,tenDVT);
                gridDsDmNhaPhanPhoi.ItemsSource = listDmNhaPhanPhoiClient;
            }
            catch (Exception)
            {
                DXMessageBox.Show("Không lấy được dữ liệu. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private bool CheckThongTinDauVao()
        {
            if (string.IsNullOrEmpty(txtMaDVT.Text))
            {
                DXMessageBox.Show("Chưa nhập mã nhà phân phối", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                txtMaDVT.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(txtTenDVT.Text))
            {
                DXMessageBox.Show("Chưa nhập tên nhà phân phối", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                txtTenDVT.Focus();
                return false;
            }
            return true;
        }

        private void SetValueInTextBox(Dm_NhaPhanPhoi objectTemple)
        {
            try
            {
                txtMaDVT.Text = objectTemple.MaNhaPhanPhoi;
                txtMaDVT.IsEnabled = false;
                txtTenDVT.Text = objectTemple.TenNhaPhanPhoi;
                txtDiaChi.Text = objectTemple.DiaChi;
                txtGhiChu.Text = objectTemple.GhiChu;
                chkKichHoat.IsChecked = objectTemple.KichHoat;
            }
            catch(Exception)
            {
            }
        }

        private void btnThemMoi_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            GetThemMoi();
        }

        private void btnLuu_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                if (CheckThongTinDauVao() == false)
                {
                    return;
                }

                if (laThemMoi)
                {
                    if (dmNhaPhanPhoiServer.FindTrungMaDmNhaPhanPhoi(txtMaDVT.Text))
                    {
                        DXMessageBox.Show("Đã tồn tại mã " + txtMaDVT.Text.ToUpper() + " trong dữ liệu", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        txtMaDVT.Focus();
                        return;
                    }
                    objectDmNhaPhanPhoiClient = new Dm_NhaPhanPhoi();
                    objectDmNhaPhanPhoiClient.MaNhaPhanPhoi = txtMaDVT.Text.ToUpper();
                    objectDmNhaPhanPhoiClient.TenNhaPhanPhoi = txtTenDVT.Text;
                    objectDmNhaPhanPhoiClient.DiaChi = txtDiaChi.Text;
                    objectDmNhaPhanPhoiClient.GhiChu = txtGhiChu.Text;
                    objectDmNhaPhanPhoiClient.KichHoat = chkKichHoat.IsChecked.Value;

                    if (dmNhaPhanPhoiServer.AddNewDmNhaPhanPhoi(objectDmNhaPhanPhoiClient) != null)
                    {
                        DXMessageBox.Show("Thêm mới dữ liệu thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        DXMessageBox.Show("Thêm mới dữ liệu không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        return;
                    }
                }
                else
                {
                    objectDmNhaPhanPhoiClient = new Dm_NhaPhanPhoi();
                    objectDmNhaPhanPhoiClient.MaNhaPhanPhoi = txtMaDVT.Text.ToUpper();
                    objectDmNhaPhanPhoiClient.TenNhaPhanPhoi = txtTenDVT.Text;
                    objectDmNhaPhanPhoiClient.DiaChi = txtDiaChi.Text;
                    objectDmNhaPhanPhoiClient.GhiChu = txtGhiChu.Text;
                    objectDmNhaPhanPhoiClient.KichHoat = chkKichHoat.IsChecked.Value;

                    if (dmNhaPhanPhoiServer.UpdateDmNhaPhanPhoi(objectDmNhaPhanPhoiClient))
                    {
                        DXMessageBox.Show("Cập nhật dữ liệu thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        DXMessageBox.Show("Cập nhật dữ liệu không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        return;
                    }
                }
                GetThemMoi();
                GetListDmNhaPhanPhoi();
            }
            catch (Exception)
            {
                DXMessageBox.Show("Thao tác không thành công. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                GetThemMoi();
            }
        }

        private void btnXoa_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                objectDmNhaPhanPhoiClient = new Dm_NhaPhanPhoi();
                objectDmNhaPhanPhoiClient = (Dm_NhaPhanPhoi)gridDsDmNhaPhanPhoi.GetFocusedRow();
                if (objectDmNhaPhanPhoiClient == null)
                {
                    return;
                }

                if (DXMessageBox.Show("Bạn muốn xóa dữ liệu này ?", "Thông báo", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {

                    if (dmNhaPhanPhoiServer.DeleteDmNhaPhanPhoi(objectDmNhaPhanPhoiClient))
                    {
                        DXMessageBox.Show("Xóa dữ liệu thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        DXMessageBox.Show("Xóa dữ liệu không thành công.\nDữ liệu này đã được sử dụng.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                }
                GetThemMoi();
                GetListDmNhaPhanPhoi();
            }
            catch (Exception)
            {
                DXMessageBox.Show("Thao tác không thành công. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                GetThemMoi();
            }
        }

        private void btnHuyBo_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                FormLoaded();
                GetListDmNhaPhanPhoi();
            }
            catch(Exception)
            {
            }
        }

        private void btnDong_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                DockLayoutManager dockLayoutManager = this.Parent as DockLayoutManager;
                BaseLayoutItem bli = dockLayoutManager.ActiveMDIItem;
                if (bli != null)
                {
                    dockLayoutManager.DockController.Close(bli);
                }
            }
            catch (Exception)
            {
            }
        }

        private void view_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            try
            {
                if (e.RightButton == MouseButtonState.Pressed) return;
                if (gridDsDmNhaPhanPhoi.View.GetRowHandleByMouseEventArgs(e) != GridControl.InvalidRowHandle
                    && gridDsDmNhaPhanPhoi.View.GetRowHandleByMouseEventArgs(e) != GridControl.AutoFilterRowHandle
                    && gridDsDmNhaPhanPhoi.View.GetRowHandleByMouseEventArgs(e) != GridControl.NewItemRowHandle)
                {
                    objectDmNhaPhanPhoiClient = (Dm_NhaPhanPhoi)gridDsDmNhaPhanPhoi.GetFocusedRow();
                    laThemMoi = false;
                    SetValueInTextBox(objectDmNhaPhanPhoiClient);
                }
            }
            catch
            {
            }
        }

        private void view_KeyUp(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.Enter)
                {
                    objectDmNhaPhanPhoiClient = (Dm_NhaPhanPhoi)gridDsDmNhaPhanPhoi.GetFocusedRow();
                    laThemMoi = false;
                    SetValueInTextBox(objectDmNhaPhanPhoiClient);
                }
            }
            catch
            {
            }
        }
    }
}
